﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Model;
using Util;
using RegraNegocio;

namespace ControleDePedidos
{
    public partial class Categoria : Form
    {
        private Model.Categoria categoria = null;

        public Categoria()
        {
            InitializeComponent();
            this.cmbAcao.SelectedIndex = 0;
            dtgResultado.AutoGenerateColumns = false;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            categoria = new Model.Categoria();

            if (cmbAcao.SelectedIndex.Equals(0))
            {
                txtID.Text = "0";

                Dictionary<String, String> camposValidados = FormularioUtil.getInstance().validarCampos(this.Controls);

                if (camposValidados != null && camposValidados.Count > 0)
                {
                    foreach (var chave in camposValidados)
                    {
                        MessageBox.Show(chave.ToString().Replace(',', ':'), "Atenção");
                    }
                    return;
                }
                else
                {
                    categoria.Nome = txtNome.Text;
                    categoria.Descricao = txtDescricao.Text;
                }

                if (CategoriaBO.getInstance().gravar(categoria))
                {

                    MessageBox.Show(String.Format("Sucesso na inserção da Categoria {0} ", categoria.Nome));

                    FormularioUtil.getInstance().limparCampos(this.Controls);

                    cmbAcao.SelectedIndex = 0;
                }
                else
                {
                    MessageBox.Show("Erro na inserção da Categoria.");
                }

            }

            else if (cmbAcao.SelectedIndex.Equals(1))
            {
                if (txtID.Text.Equals("") && txtNome.Text.Equals(""))
                {
                    MessageBox.Show("Favor preencher um dos campos para busca: Codigo / Nome");

                    return;
                }

                if (!txtID.Text.Equals(""))
                {
                    if (FormularioUtil.getInstance().isInteiro(txtID.Text))
                    {
                        categoria.Codigo = int.Parse(txtID.Text);
                    }
                    else
                    {
                        MessageBox.Show("O código digitado deve ser um número inteiro!");

                        return;
                    }
                }

                if (!txtNome.Text.Equals(""))
                {
                    categoria.Nome = txtNome.Text;
                }

                cmbAcao.SelectedIndex = 1;

                preencheGrid(categoria);
            }

            else if (cmbAcao.SelectedIndex.Equals(2))
            {
                Dictionary<String, String> camposValidados = FormularioUtil.getInstance().validarCampos(this.Controls);

                if (camposValidados != null && camposValidados.Count > 0)
                {
                    foreach (var chave in camposValidados)
                    {
                        MessageBox.Show(chave.ToString().Replace(',', ':'), "Atenção");
                    }
                    return;
                }
                else
                {
                    categoria.Codigo = Int32.Parse(txtID.Text);
                    categoria.Nome = txtNome.Text;
                    categoria.Descricao = txtDescricao.Text;
                }

                if (CategoriaBO.getInstance().alterar(categoria))
                {

                    MessageBox.Show(String.Format("Sucesso na alteração da Categoria {0} ", categoria.Nome));

                    FormularioUtil.getInstance().limparCampos(this.Controls);

                    cmbAcao.SelectedIndex = 2;

                    preencheGrid(categoria);
                }
                else
                {
                    MessageBox.Show("Erro na alteração da Categoria.");
                }
            }

            else if (cmbAcao.SelectedIndex.Equals(3))
            {
                if (!txtID.Text.Equals(""))
                {
                    if (FormularioUtil.getInstance().isInteiro(txtID.Text))
                    {
                        categoria.Codigo = int.Parse(txtID.Text);

                        if (CategoriaBO.getInstance().excluir(categoria))
                        {
                            MessageBox.Show(String.Format("Sucesso na exclusão da Categoria {0} ", categoria.Nome));

                            FormularioUtil.getInstance().limparCampos(this.Controls);

                            cmbAcao.SelectedIndex = 3;

                            preencheGrid(categoria);
                        }
                        else
                        {
                            MessageBox.Show("Erro na exclusão da Categoria.");
                        }
                    }
                    else
                    {
                        MessageBox.Show("O código digitado deve ser um número inteiro!");
                        return;
                    }
                }
            }
        }

        private void cmbAcao_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (cmbAcao.SelectedIndex.Equals(0))
            {
                lblID.Visible = false;
                txtID.Visible = false;
                txtNome.Enabled = true;
                txtDescricao.Enabled = true;
                btnSalvar.Text = ("Cadastrar");
            }
            else if (cmbAcao.SelectedIndex.Equals(1))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = true;
                txtNome.Enabled = true;
                txtDescricao.Enabled = false;
                btnSalvar.Text = ("Consultar");
            }
            else if (cmbAcao.SelectedIndex.Equals(2))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = false;
                txtNome.Enabled = true;
                txtDescricao.Enabled = true;
                btnSalvar.Text = ("Editar");
            }
            else if (cmbAcao.SelectedIndex.Equals(3))
            {
                lblID.Visible = true;
                txtID.Visible = true;
                txtID.Enabled = false;
                txtNome.Enabled = false;
                txtDescricao.Enabled = false;
                btnSalvar.Text = ("Excluir");
            }
        }

        private void dtgResultado_Click(object sender, EventArgs e)
        {
            DataGridViewRow linhaAtual = dtgResultado.CurrentRow;

            categoria = new Model.Categoria();

            categoria.Codigo = Int32.Parse(linhaAtual.Cells[0].Value.ToString());

            categoria = CategoriaBO.getInstance().consulta(categoria);

            txtID.Text = categoria.Codigo.ToString();
            txtNome.Text = categoria.Nome;
            txtDescricao.Text = categoria.Descricao;
        }

        private void preencheGrid(Model.Categoria categoria)
        {
            try
            {
                List<Model.Categoria> categoriasRecuperadas = CategoriaBO.getInstance().recuperarCategorias(categoria);

                dtgResultado.DataSource = categoriasRecuperadas;
                dtgResultado.Visible = true;
            }
            catch (Exception cause)
            {
                dtgResultado.DataSource = null;
                dtgResultado.Visible = false;
                MessageBox.Show(cause.Message);
            }
        }
    }
}
